#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>


//#define Print(format,n)  printf("the value of "#n" is " format "\n",n)
//
//int main()
//{
//	int a = 10;
//	Print("%d", a);
//	int b = 20;
//	Print("%d", b);
//	float c = 5.5f;
//	Print("%f", c);
//	return 0;
//}


//#define GENERIC_MAX(type)  \
//type type##_max(type x,type y)\
//{\
//    return x>y?x:y;\
//}
//
//GENERIC_MAX(int)
//GENERIC_MAX(float)
//
//int main()
//{
//#if 0
//    printf("%d\n", int_max(3, 5));
//#endif
//    printf("%f\n",float_max(5.0,7.0));
//    return 0;
//}

//int main()
//{
//    int n = 0;
//    scanf("%d", &n);
//    int nums[4];
//    int ans[2 * 4];
//    int i = 0;
//    for (i = 0; i < 4; i++)
//    {
//        scanf("%d", &nums[i]);
//    }
//    for (int j = 0; j < 2 * 4; j++)
//    {
//        ans[i] = nums[i];
//        ans[i + n] = nums[i];
//    }
//    for (i = 0; i < 2 * 4; i++)
//    {
//        printf("%d ", ans[i]);
//    }
//    return 0;
//}

///**
// * Note: The returned array must be malloced, assume caller calls free().
// */
//int* getConcatenation(int* nums, int numsSize, int* returnSize) {
//    int* ans = (int*)malloc(sizeof(int) * 2 * numsSize);
//    for (int i = 0; i < numsSize; i++)
//    {
//        ans[i] = nums[i];
//        ans[i + numsSize] = nums[i];
//    }
//    *returnSize = 2 * numsSize;
//    return ans;
//}



//#define EXCHANGE(x)  
//
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	EXCHANGE(n);
//	return 0;
//}



void Swap(int *arr)
{
	int i = 0;
	for (i = 0; i < 32; i+=2)
	{
		int tmp = arr[i];
		arr[i] = arr[i + 1];
		arr[i + 1] = tmp;
	}
	for (int j = 0; j < 32; j++)
	{
		printf("%d ", arr[j]);
	}
}

int main()
{
	int n = 0;
	scanf("%d", &n);
	int arr[32] = { 0 };
	int m = 0;
	int i;
	for (i = 0; i < 32; i++)
	{
		if (n & 1 == 0)
		{
			arr[i] = 0;
		}
		else
		{
			arr[i] = 1;
		}
		n = n << 1;
	}
	for (int j = 0; j < 32; j++)
	{
		printf("%d ", arr[j]);
	}
	printf("\n");
	Swap(arr);
	return 0;
}